/* @flow */

import { toArray } from '../util/index'
export function initUse (Vue: GlobalAPI) {
  // 定义Vue.use
  Vue.use = function (plugin: Function | Object) {

    // 获取已安装的插件
    const installedPlugins = (this._installedPlugins || (this._installedPlugins = []))

    // 如果已经安装, 返回this
    if (installedPlugins.indexOf(plugin) > -1) {
      return this
    }

    // additional parameters
    // 获取参数,转化成数组
    // 将Vue构造函数放到第一位
    const args = toArray(arguments, 1)
    args.unshift(this)

    // 执行传入函数就执行函数, 传入对象就执行对象的install 方法
    if (typeof plugin.install === 'function') {
      plugin.install.apply(plugin, args)
    } else if (typeof plugin === 'function') {
      plugin.apply(null, args)
    }
    // 缓存当前插件到 installPlugins 中
    installedPlugins.push(plugin)
    return this
  }
}
